package pe.edu.upc.jtigers.svpn.service.implement;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.jtigers.svpn.aplication.bean.UsuarioBean;
import pe.edu.upc.jtigers.svpn.aplication.excepcion.DAOExcepcion;
import pe.edu.upc.jtigers.svpn.data.Constans.PerfilConstans;
import pe.edu.upc.jtigers.svpn.data.Constans.TipoUsuarioConstans;
import pe.edu.upc.jtigers.svpn.domain.data.SabioDao;
import pe.edu.upc.jtigers.svpn.domain.data.UsuarioDao;
import pe.edu.upc.jtigers.svpn.domain.model.Perfil;
import pe.edu.upc.jtigers.svpn.domain.model.Sabio;
import pe.edu.upc.jtigers.svpn.domain.service.SabioService;

@Service
public class SabioServiceImpl implements SabioService {

	@Autowired
	private SabioDao sabioDao;
	@Autowired
	private UsuarioDao usuarioDao;

	@Override
	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { DAOExcepcion.class })
	public Sabio registrarSabio(UsuarioBean usuarioBean) {

		Sabio sabio = new Sabio();
		try {
			sabio.setCorreoElectronico(usuarioBean.getCorreoElectronico());
			sabio.setNumDocumento(usuarioBean.getNumDocumento());
			if (usuarioBean.getIdUsuario() != 0
					|| usuarioDao.validarUsuario(sabio) == null) {

				sabio.setIdUsuario(usuarioBean.getIdUsuario());
				sabio.setNombres(usuarioBean.getNombres());
				sabio.setApePaterno(usuarioBean.getApePaterno());
				sabio.setApeMaterno(usuarioBean.getApeMaterno());
				sabio.setSexo(usuarioBean.getSexo());
				sabio.setNumDocumento(usuarioBean.getNumDocumento());
				sabio.setCorreoElectronico(usuarioBean.getCorreoElectronico());
				sabio.setCelular(usuarioBean.getCelular());
				sabio.setDireccion(usuarioBean.getDireccion());
				sabio.setTipoUsuario(TipoUsuarioConstans.SABIO);

				try {

					if (usuarioBean.getFechaNacimiento() != null
							&& usuarioBean.getFechaNacimiento() != "") {

						SimpleDateFormat formato = new SimpleDateFormat(
								"dd/mm/yy");
						sabio.setFechaNacimiento(formato.parse(usuarioBean
								.getFechaNacimiento()));
					}
				} catch (ParseException e) {
				}
				sabio.setContrasena(usuarioBean.getContrasena());
				sabio.getTipoDocumento().setIdDetalleParametro(
						usuarioBean.getIdTipoDocumento());
				sabio.setApelativo(usuarioBean.getApelativo());
				sabio.setResumenAutobiografico(usuarioBean
						.getResumenAutobiografico());
				sabio.setSitioWeb(usuarioBean.getSitioWeb());
				sabio.setCuentaBancaria(usuarioBean.getCuentaBancaria());

				sabio.setPerfil(new Perfil());
				sabio.getPerfil().setIdPerfil(PerfilConstans.SABIO);

				sabio = sabioDao.registrarSabio(sabio);
			}
		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return sabio;
	}

	@Override
	public Sabio obtenerSabio(int idSabio) {
		Sabio sabio = null;
		try {
			sabio = sabioDao.obtenerSabio(idSabio);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
		return sabio;
	}

	@Override
	public UsuarioBean obtenerUsuarioBean(int idSabio) {
		Sabio sabio = this.obtenerSabio(idSabio);
		UsuarioBean usuario = null;
		if (sabio != null) {
			usuario = new UsuarioBean();
			usuario.setApelativo(sabio.getApelativo());
			usuario.setApeMaterno(sabio.getApeMaterno());
			usuario.setApePaterno(sabio.getApePaterno());
			usuario.setCelular(sabio.getCelular());
			usuario.setContrasena(sabio.getContrasena());
			usuario.setCorreoElectronico(sabio.getCorreoElectronico());
			usuario.setCuentaBancaria(sabio.getCuentaBancaria());
			usuario.setDireccion(sabio.getDireccion());

			if (sabio.getFechaNacimiento() != null) {

				SimpleDateFormat format = new SimpleDateFormat("dd/mm/yy");
				usuario.setFechaNacimiento(format.format(sabio
						.getFechaNacimiento()));
			}
			usuario.setIdTipoDocumento(sabio.getTipoDocumento()
					.getIdDetalleParametro());
			usuario.setIdUsuario(sabio.getIdUsuario());
			usuario.setNombres(sabio.getNombres());
			usuario.setNumDocumento(sabio.getNumDocumento());
			usuario.setResumenAutobiografico(sabio.getResumenAutobiografico());
			usuario.setSexo(sabio.getSexo());
			usuario.setSitioWeb(sabio.getSitioWeb());
			usuario.setTipoUsuario(sabio.getTipoUsuario());
		}
		return usuario;
	}
}
